﻿using System;
using System.Collections.Generic;
using System.Linq;
using Domain;
using Domain.Entities;
using BusinessLogic.Interfaces;
using System.Data.Entity;
using System.Linq.Expressions;

namespace BusinessLogic.Implementations
{
    public class EFProfilesRepository : IProfilesRepository
    {
        // реализация интерфейса
        private DomainContext context;
        public EFProfilesRepository(DomainContext context)
        {
            this.context = context;
        }

        public IEnumerable<Profile> GetProfiles()
        {
            return context.Profiles;
        }


        /// <summary>
        /// Возвращает список профилей по заданному фильтру. 
        /// </summary>
        /// <param name="filter">Фильтр списка сущностей. В качестве параметра получает Profile объект, возвращает true, если этот объект должен быть включен в итоговый список</param>
        /// <returns>Отфильтрованный список профилей или пустой список</returns>
        public IEnumerable<Profile> GetList(Expression<Func<Profile, bool>> filter)//?????
        {
            return context.Profiles.Where(filter);
        }

        // получение ID профиля по табельному номеру
        public int GetProfileByPersNoID(string persNo)
        {
            Profile prof= context.Profiles.FirstOrDefault(x=>x.PersNo==persNo);
            return prof != null ? (int)prof.ID : 0;
        }

        //public Profile GetProfileById(int id)
        //{
        //    return context.Profiles.FirstOrDefault(x => x.ID == id);
        //}
        //public IEnumerable<Profile> GetProfileByFirstName(string firstName)
        //{
        //    return GetList(x => x.FirstName == firstName);
        //}

        //public Profile GetProfileByMiddleName(string middleName)
        //{
        //    return context.Profiles.FirstOrDefault(x => x.MiddleName == middleName);
        //}

        //public Profile GetProfileByLastName(string lastName)
        //{
        //    return context.Profiles.FirstOrDefault(x => x.LastName == lastName);
        //}

        //public Profile GetProfileByPhone(string phone)
        //{
        //    return context.Profiles.FirstOrDefault(x => x.Phone == phone);
        //}


        public void CreateProfile(string firstName, string middleName, string lastName, string persNo, string phone, int departmentId)
        {
            Profile prof = new Profile
            {
                
                FirstName = firstName,
                MiddleName = middleName,
                LastName = lastName,
                PersNo = persNo,
                Phone = phone,
                DepartmentID=departmentId
            };
            SaveProfile(prof);
        }

        public void SaveProfile(Profile prof)
        {
            try
            {
                if (prof.ID == 0) // если не существует id, добавляем нового пользователя
                    context.Profiles.Add(prof);
                else // иначе редактируем
                    context.Entry(prof).State = EntityState.Modified;
                context.SaveChanges();
            }
            catch (Exception)
            { 
                
            }
        }
        //Получение  профиля по User 
        public Profile GetProfile(User us)
        {
            return context.Profiles.FirstOrDefault(x => x.ID == us.ProfileID);
        }


        
    }
}
